Introdução à Lógica de Programação

Aula 10 - Funções em JavaScript



Helder Jefferson Ferreira da Luz

helder.luz@ifpr.edu.br

Funções

Função é um bloco de código nomeado que é executado quando chamado.


Idealmente, possui uma funcionalidade específica.


Pode receber dados, chamados de parâmetros e pode retornar valores.

Funções embutidas

Funções embutidas (ou funções nativas) são aquelas que já vêm pré-definidas no JavaScript, estando disponíveis para uso imediato.


Algumas das funções embutidas já usadas: console.log(), parseInt(), parseFloat(), typeof, prompt() e alert().

Funções - criação

Criação de uma função

function helloWorld() { // função
    console.log('Hello World!'); // bloco de código da função
}

helloWorld(); // chamada da função

Os nomes de funções seguem as mesmas regras de nomenclatura de variáveis: devem começar com uma letra, $ ou subtraço (_), podendo conter letras, números, $ e subtraços.

Funções - parâmetros

Funções podem aceitar valores de entrada, chamados de parâmetros, que são utilizados para realizar operações dentro da função.
Os valores passados aos parâmetros são chamados de argumentos.


  • Parâmetro: É uma variável definida na declaração da função para receber valores.
function saudacao(nome) {  // "nome" é um parâmetro
    console.log(`Olá, ${nome}`);
}
  • Argumento: É o valor real passado à função ao chamá-la.
saudacao("Helder");  // "Helder" é um argumento

Funções - parâmetros

Exemplo com mais de um parâmetro

function soma(a, b) {
    console.log(`Resultado: ${a + b}`);
}

soma(3, 4);

Funções - parâmetros

Quando há parâmetros na função, é esperado que na chamada seja passado todos os argumentos na ordem específicada. Isso é chamado de parâmetro posicional.
Parâmetros que não receberem um argumento terão valor undefined.

function nome(primeiroNome, sobrenome) {
    console.log(`Nome completo: ${primeiroNome} ${sobrenome}`);
}

nome('José');

Saída:

Nome completo: José undefined

Funções - parâmetros

Pode-se definir um valor padrão para os parâmetros, tornando-os opcionais

function nomeCompleto(primeiroNome, segundoNome, sobrenome = '') {
    console.log(`Nome completo: ${primeiroNome} ${segundoNome} ${sobrenome}`);
}

nomeCompleto('Mario', 'Sérgio', 'Augusto');

nomeCompleto('Mario', 'Sérgio'); // sem passar o sobrenome

Funções - retorno de valor

A função pode retornar um valor.
Esse valor pode ser armazenado em uma variável, ou passado diretamente como argumento para outra função.

Exemplo de função com retorno

function soma(a, b) {
    return a + b;
}

let resultado = soma(3, 4);
console.log(`Resultado da soma é ${resultado}`);

Funções - sem implementação

É possível criar uma função cujo corpo, isto é, cujas instruções ainda não foram definidas. Para fazer isso, basta deixar o corpo vazio ou usar comentários.

function funcao() {
    // TODO: implementar
}

// ou

function outraFuncao() {
}

Funções - documentação com JSDoc

JSDoc:

  • É um sistema de documentação usado para explicar o propósito da função, seus parâmetros e retorno.
  • Facilita a compreensão do código para outros desenvolvedores e para o próprio programador.
  • Permite que editores de código forneçam melhor autocomplete e verificação de tipos.

Funções - documentação com JSDoc

Como Criar JSDoc:

  • Escreva o JSDoc logo acima da definição da função.
  • Utilize /** para iniciar e */ para finalizar o comentário JSDoc.
  • Inclua:
    • Descrição da função.
    • @param para explicar os parâmetros e seus tipos.
    • @returns para o retorno da função e seu tipo.
    • Opcional: @example para exemplo de uso da função.

Funções - documentação com JSDoc

Exemplo

/**
 * Calcula a área de um retângulo.
 *
 * @param {number} base - Comprimento da base do retângulo.
 * @param {number} altura - Altura do retângulo.
 * @returns {number} A área calculada do retângulo.
 * 
 * @example
 * // Retorna 15
 * calcularAreaRetangulo(5, 3);
 */
function calcularAreaRetangulo(base, altura) {
    return base * altura;
}

Dúvidas? 🤔

Exercícios

  1. Escreva uma função em JavaScript que calcule a área de um triângulo.
  2. Escreva uma função em JavaScript que verifique se um número é par ou ímpar.
  3. Escreva uma função chamada ehPrimo que receba um número inteiro positivo e retorne true se for um número primo, e false caso contrário.
  4. Escreva uma função chamada somaImpares que receba um número inteiro positivo n e retorne a soma de todos os números ímpares de 0 até n.
  5. Escreva uma função chamada converterCelsiusParaFahrenheit que converta temperatura de Celsius para Fahrenheit. Fórmula:

Exercícios

  1. Escreva uma função chamada compararNumeros que receba dois números e retorne true se eles forem iguais e a diferença entre eles se forem diferentes.
  2. Implementar uma função que calcule o Índice de Massa Corpórea(IMC), dados o peso e a altura informados pelo usuário.
    Fórmula do IMC:
  3. Crie uma função chamada classificarIMC que receba o IMC e retorne a classificação:
    • Abaixo do peso: IMC < 18.5
    • Peso normal: 18.5 <= IMC < 25
    • Sobrepeso: 25 <= IMC < 30
    • Obesidade: IMC >= 30

Exercícios

  1. Escreva duas funções, uma chamada ehMenor e outra ehMaior, que recebem três números e retorne o menor e o maior valor entre eles, respectivamente.
  2. Escreva uma função chamada calcularDesconto que receba o valor de uma compra e retorne:
    • 10% de desconto se valor >= 100
    • 5% de desconto se valor >= 50
    • Sem desconto se valor < 50

--- # exercícios para mudar 4. Escreva uma função em Python que calcule a média de uma lista de números. 5. Escreva uma função em Python que encontre o maior valor em uma lista de números. 6. Escreva uma função em Python que inverta uma lista de números. 7. Escreva uma função em Python que encontre a soma dos valores pares em uma lista de números. 8. Escreva uma função em Python que calcule a soma dos elementos de uma matriz. 9. Escreva uma função em Python que calcule a média dos elementos de uma matriz.

--- # Arrow Functions O JavaScript também oferece uma sintaxe mais concisa para criar funções chamada **Arrow Functions** (funções seta). Sintaxe básica: ```javascript // Função tradicional function soma(a, b) { return a + b; } // Arrow function const soma = (a, b) => { return a + b; }; // Arrow function mais concisa (quando há apenas um return) const soma = (a, b) => a + b; // Arrow function com um parâmetro (parênteses opcionais) const dobrar = x => x * 2; // Arrow function sem parâmetros const saudar = () => console.log('Olá!'); ``` --- # Arrow Functions vs Funções Tradicionais **Vantagens das Arrow Functions:** - Sintaxe mais concisa - Útil para funções simples e callbacks - Herdam o contexto (`this`) do escopo onde foram definidas **Quando usar cada uma:** - **Funções tradicionais:** Para funções mais complexas, métodos de objetos, construtores - **Arrow functions:** Para funções simples, callbacks, operações funcionais ```javascript // Exemplo com callback const numeros = [1, 2, 3, 4, 5]; // Usando arrow function em um map const dobrados = numeros.map(num => num * 2); console.log(dobrados); // [2, 4, 6, 8, 10] ```

--- # Funções - parâmetros Pode-se passar os argumentos nomeando os parâmetros (usando objetos) ```javascript function nomeCompleto(primeiroNome, segundoNome, sobrenome) { console.log(`Nome completo: ${primeiroNome} ${segundoNome} ${sobrenome}`); } // Passando argumentos nomeados usando um objeto function nomeCompletoObj({primeiroNome, segundoNome, sobrenome}) { console.log(`Nome completo: ${primeiroNome} ${segundoNome} ${sobrenome}`); } nomeCompletoObj({ primeiroNome: 'Mario', segundoNome: 'Sérgio', sobrenome: 'Augusto' }); nomeCompletoObj({ sobrenome: 'Augusto', primeiroNome: 'Mario', segundoNome: 'Sérgio' }); ```

--- # Funções - retorno de valor Exemplo de retorno com múltiplos valores (usando array) ```javascript function operacao(a, b) { let soma = a + b; let subtracao = a - b; return [soma, subtracao]; } let [resultado1, resultado2] = operacao(3, 4); console.log(`Resultado da soma é ${resultado1}`); console.log(`Resultado da subtração é ${resultado2}`); ``` Exemplo de retorno com múltiplos valores (usando objeto) ```javascript function operacaoObj(a, b) { return { soma: a + b, subtracao: a - b }; } let {soma, subtracao} = operacaoObj(3, 4); console.log(`Resultado da soma é ${soma}`); console.log(`Resultado da subtração é ${subtracao}`); ```